#pragma once

#include <boost/shared_ptr.hpp>
#include <boost/noncopyable.hpp>

class MessageBase : private boost::noncopyable
{
public:
   MessageBase(void);
   virtual ~MessageBase(void);
   void Execute();
protected:
   virtual void do_execute() = 0;
};

typedef boost::shared_ptr<MessageBase> MessageBasePtr;